Various communication technologies on the Internet allow users with common interest to collaborate, share files and other data records, chat with one another, multi-cast audio and video for presentations and group meetings, and engage in multi-player gaming. Currently, however, most communication and record sharing on the Internet takes place in a server centric environment whereby all communication flows to or through large central servers to which individuals may connect to join and participate in such communication.
With the reemergence of peer-to-peer technology, the current server centric model of Internet communication and record sharing is quickly being replaced. Indeed, peer-to-peer technologies enable users to contact one another and share records in a serverless environment, free from the constraints of server based Internet communication. In a peer-to-peer based system, a user's anonymity and privacy may be maintained since communication occurs directly between peers within the network.
Peer-to-peer communication, and in fact all types of communication, depends on the possibility of establishing valid connections between selected entities or nodes. These entities or nodes may be peers (e.g., users or machines) or groups formed within a peer-to-peer network. The connections between the nodes form the peer-to-peer graph that enables communication and information to be passed to and between the nodes. The nodes typically have assigned a stable name. Each peer is found within the peer-to-peer cloud by resolving this name to a current address when a connection is needed.
Because peer-to-peer networks are formed as a graph of distributed users or peers, it is necessary that communication be passed from one peer to another before all peers within a network may become cognizant of the shared information. In a typical peer-to-peer infrastructure nodes in a graph share such data via structured packets called records. Records can contain any kind of data imaginable from chat messages to pointers to files. However, while some information is shared between peers as a matter of course, a vast majority of information available from the peers is not shared until and unless a peer requests that information. Such a request is embodied in a search query for the record from a neighbor peer.
However, in order for a search to converge to the desired information, the query must somehow adequately identify the desired record stored in the neighbor peers data store. Unfortunately, a record in its base form inherently does not provide any mechanism by which to mark up and describe through meta-data the contents of the record to allow an intelligent query to locate it. Further, because peer-to-peer infrastructures are distributed systems, there is an ever present need to manage the amount of data and meta-data replicated amongst nodes in a graph. Replicating large amounts of meta-data to each node is not an option in today's bandwidth constrained networking infrastructure. Thus the size of the meta-data describing the record's contents needs to be appropriate. Further, there is currently no standard way of describing the contents of a record. As such, the success of any record search query for a particular record or type of record is not well defined. Similarly, if the search is successful, the number of records found that are returned often swamps or overwhelms the actual record content sought.
There exists, therefore, a need in the art for a peer record structure and method for describing the record content and a simple record query language that may be used to construct queries for specific records and record types.